/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package tpiServeur;

import tpiprotocole.LH.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.net.ServerSocket;
import java.util.Calendar;
import java.util.Locale;

/**
 * @date 13 avr. 2011
 * @time 13:53:58
 * @author Luis.HAFNER
 */
public class ControleurServeur implements ActionListener {

    private VueServeur vueServeur;
    private ModeleServeur modeleServeur;
    private ServerSocket serverSocket;
    private RandomAccessFile fichierLog;

    public ControleurServeur(VueServeur vueServeur, ModeleServeur modeleServeur) {
        this.vueServeur = vueServeur;
        this.modeleServeur = modeleServeur;
        try {
            this.fichierLog = new RandomAccessFile("LH.log","rw");

        }
        catch(IOException e){
            System.out.println(e);
        }
        
    }

    public void actionPerformed(ActionEvent e) {

        if (e.getSource()==this.vueServeur.getBoutonDemarrer() && this.vueServeur.getBoutonDemarrer().getText().equals("Démarrer")){
            String portChoisi = this.getVueServeur().getChampPort().getText();
            if(portChoisi.isEmpty()){
                portChoisi="50000";
            }
            try {
                serverSocket = new ServerSocket(Integer.valueOf(portChoisi));
                Thread threadConnexion = new Thread(new EcouteServeur(serverSocket,this));
                threadConnexion.start();
                this.vueServeur.getTexteReception().setText("Serveur démarré. Port : "+portChoisi+" IP : "+modeleServeur.getIPLocale()+"\n\n");
                this.vueServeur.changerEtatBoutonDemarrer();

                this.fichierLog.seek(this.fichierLog.length());

                Calendar cal = Calendar.getInstance();

                StringBuilder sbReception = new StringBuilder();
                sbReception.append("[");
                sbReception.append(cal.get(Calendar.DAY_OF_MONTH));
                sbReception.append(" ");
                sbReception.append(cal.getDisplayName(Calendar.MONTH,1 , Locale.ENGLISH));
                sbReception.append(" ");
                sbReception.append(cal.get(Calendar.YEAR));
                sbReception.append(" ");
                sbReception.append(cal.get(Calendar.HOUR_OF_DAY));
                sbReception.append(":");
                sbReception.append(cal.get(Calendar.MINUTE));
                sbReception.append(":");
                sbReception.append(cal.get(Calendar.SECOND));
                sbReception.append("/");
                sbReception.append("Serveur démarré");
                sbReception.append("] ");

                this.fichierLog.writeBytes(sbReception.toString()+"\r\n");

            }
            catch (IOException ex) {
                System.out.println("Erreur d'ecoute, le port "+portChoisi+" est déja utilisé");
            }
        }
        else if(e.getSource()==this.vueServeur.getBoutonQuitter()){
            System.exit(0);
        }
        else if(e.getSource()==this.vueServeur.getBoutonOuvrirFichier() && System.getProperty("os.name").toLowerCase().indexOf( "win" ) >= 0){
            try {
                this.fichierLog.close();
                Runtime.getRuntime().exec("notepad.exe LH.log");
                this.fichierLog = new RandomAccessFile("LH.log","rw");
            } catch (IOException ex) {
                System.out.println(ex);
            }
        }
        else if(e.getSource()==this.vueServeur.getBoutonDemarrer() && this.vueServeur.getBoutonDemarrer().getText().equals("Arrêter")){
            try {
                serverSocket.close();
                this.fichierLog.seek(this.fichierLog.length());

                Calendar cal = Calendar.getInstance();

                StringBuilder sbReception = new StringBuilder();
                sbReception.append("[");
                sbReception.append(cal.get(Calendar.DAY_OF_MONTH));
                sbReception.append(" ");
                sbReception.append(cal.getDisplayName(Calendar.MONTH,1 , Locale.ENGLISH));
                sbReception.append(" ");
                sbReception.append(cal.get(Calendar.YEAR));
                sbReception.append(" ");
                sbReception.append(cal.get(Calendar.HOUR_OF_DAY));
                sbReception.append(":");
                sbReception.append(cal.get(Calendar.MINUTE));
                sbReception.append(":");
                sbReception.append(cal.get(Calendar.SECOND));
                sbReception.append("/");
                sbReception.append("Serveur arrêté");
                sbReception.append("] ");

                this.fichierLog.writeBytes(sbReception.toString()+"\r\n");
                this.fichierLog.close();
                this.vueServeur.changerEtatBoutonDemarrer();
            } catch (IOException ex) {
                System.out.println(ex);
            }
        }
    }
    public ModeleServeur getModeleServeur() {
        return modeleServeur;
    }

    public RandomAccessFile getFichierLog() {
        return fichierLog;
    }

    public VueServeur getVueServeur() {
        return vueServeur;
    }

}
